﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Billing
{
    [Serializable]
    public class BillingSettings
    {
        public string ServerName { get; set; }
        public string DbName { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public string PathToCatalog { get; set; }
        public string PathToArchive { get; set; }
        public int Interval { get { return _interval; } set { _interval = value; } }
        public bool IsArchived { get; set; }
        public bool IsWindowsAuthentification { get; set; }

        /// <summary>
        /// Загружается экземпляр класса. Синглетон
        /// </summary>
        public static BillingSettings Item
        {
            get
            {
                if (_item == null)
                {
                    lock (_syncRoot)
                    {
                        if (_item == null)
                            _item = new BillingSettings();
                    }
                }
                return _item;
            }

        }

        /// <summary>
        /// Загружает из файла настроек данные и инициализирует ими поля класса. Является синглетоном
        /// </summary>
        public static void Load()
        {
            object obj = BillingSerialize.Deserialize(Common.SETTING_PATH);
            if (obj != null)
            {
                BillingSettings.Item.ServerName = ((BillingSettings)obj).ServerName;
                BillingSettings.Item.DbName = ((BillingSettings)obj).DbName;
                BillingSettings.Item.Login = ((BillingSettings)obj).Login;
                BillingSettings.Item.Password = ((BillingSettings)obj).Password;
                BillingSettings.Item.PathToCatalog = ((BillingSettings)obj).PathToCatalog;
                BillingSettings.Item.PathToArchive = ((BillingSettings)obj).PathToArchive;
                BillingSettings.Item.Interval = ((BillingSettings)obj).Interval;
                BillingSettings.Item.IsArchived = ((BillingSettings)obj).IsArchived;
                BillingSettings.Item.IsWindowsAuthentification = ((BillingSettings)obj).IsWindowsAuthentification;
            }
        }

        /// <summary>
        /// Текущее состояние полей экземпляра класса сохраняется в файле Common.SETTING_PATH
        /// </summary>
        public static void Save()
        {
            BillingSerialize.Serialize(Common.SETTING_PATH, BillingSettings.Item);
        }

        #region Private

        private BillingSettings() { }
        private static BillingSettings _item;
        private static object _syncRoot = new Object();
        private int _interval = 1;
        #endregion
    }
}
